|
こんにちは。かみちゃん です。
>>>下記コードでListBox1の表示が42行目までしか表示しないのですが
>
>sheetにより表示される行数が違います。
>これは外部データのコード.xlsを呼び出しているからでしょうか
>現在のbookにコード.xlsを取り込んだほうがいいのでしょうか?
>コード.xls上でユーザーフォーム3を呼び出した場合は表示されるんですがね
大変申し訳ありません。
[46086]で以下の修正コードを提示させていただいた際に、セル範囲の指定を
誤っています。
以下、[46086]の私の発言内容です。
>すみません。私、間違っていました。
>以下のように★の行を追加してください。
>
>Private Sub UserForm_Initialize()
> Dim ws As Worksheet
>
> Set ws = Workbooks("コード.xls").Sheets("Sheet1")
> With Range("A1", Cells(Rows.Count, 3).End(xlUp))
> Me.ListBox1.ColumnCount = .Columns.Count
> Me.ListBox1.ColumnWidths = "30 pt;50 pt;40 pt"
> ws.Activate '★
> Me.ListBox1.RowSource = .Address
> ThisWorkbook.Activate '★
> End With
>End Sub
最初に提示した[46067]では対応していたのですが、上記の
With Range("A1", Cells(Rows.Count, 3).End(xlUp))
を
With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
としていただく必要があります。
>>試行錯誤[46092]夜遅くまでやってみたのですが残念ながら・・・降参です。
>
>であれば、もう、初めから作るしかないのでしょうか(T_T)
ということでお詫びの印に動くと思われるコードを提示させていただきます。
一応、要件とおりにはなっていると思いますが、UserForm3の要件がよくわかりません
'==================================================
'■Sheet5("発注")モジュール([46031]より)
'==================================================
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
If 1 < Target.Count Then Exit Sub 'If Target.Cells.Count > 1 Then[結合セルはこちら]
On Error Resume Next
If Not Intersect(Target, Range("S8:S107")) Is Nothing Then
Cancel = True
UserForm1.Show vbModeless
Else
UserForm1.Hide
End If
If 1 < Target.Count Then Exit Sub
On Error Resume Next
If Not Intersect(Target, Range("R8:R107")) Is Nothing Then
Cancel = True
UserForm2.Show vbModeless
Else
UserForm2.Hide
End If
End Sub
'==================================================
'■UserForm2モジュール
' (テキスト.txtから検索条件部分一致を選択肢とする)
' (部分一致は全角半角、大文字小文字を無視)
'==================================================
'UserForm初期化処理
Private Sub UserForm_Initialize()
' Dim FName As String
' FName = ThisWorkbook.Path + "C:\テキスト.txt"
' Const cnsFILENAME = "C:\テキスト.txt"
' Dim intFF As Integer
' Dim strREC As String
' Dim GYO As Long
'
' intFF = FreeFile
' Open cnsFILENAME For Input As #intFF
' GYO = 1
' Do Until EOF(intFF)
' Line Input #intFF, strREC
' UserForm2.ListBox1.AddItem strREC
' Loop
'
Me.Left = 150
Me.Top = 100
End Sub
'検索条件を入力後、部分一致するデータをComboBoxへ追加
Private Sub CommandButton1_Click()
' Dim FName As String
Dim cnsFILENAME As String '★
Dim intFF As Integer
Dim strREC As String
Dim GYO As Long
'FName = ThisWorkbook.Path + "C:\テキスト.txt"
'Const cnsFILENAME = "C:\テキスト.txt"
cnsFILENAME = ThisWorkbook.Path + "\テキスト.txt" '★
intFF = FreeFile
Open cnsFILENAME For Input As #intFF
GYO = 1
Do Until EOF(intFF)
Line Input #intFF, strREC
'UserForm2.ListBox1.AddItem strREC
If StrConv(StrConv(strREC, vbWide), vbUpperCase) _
Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
Me.ComboBox1.AddItem strREC '★
End If
Loop
End Sub
'ComboBoxの選択値をアクティブセルへ転記
Private Sub CommandButton2_Click()
ActiveCell.Value = Me.ComboBox1.Value
Unload Me
End Sub
'ComboBoxの選択肢を消去
Private Sub CommandButton3_Click()
Me.ComboBox1.Clear
End Sub
'==================================================
'■UserForm3モジュール
' (コード.xlsから指定範囲すべてを選択肢とする)
'==================================================
'UserForm初期化処理
Private Sub UserForm_Initialize()
Me.Left = 150
Me.Top = 100
End Sub
'コード.xlsのA1セル〜C列の最終列までをComboBoxへ追加
Private Sub CommandButton1_Click()
Dim WB1 As Workbook
Dim WB2 As Workbook
Dim strFileName As String
Dim ws As Worksheet
Set WB1 = ThisWorkbook
strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
If strFileName <> "False" Then
Application.ScreenUpdating = False
'すでに開いているかどうかをチェックする
If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
MsgBox strFileName & vbCrLf & "を開きます"
Set WB2 = Workbooks.Open(strFileName)
Else
Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
End If
WB1.Activate
Set ws = WB2.Sheets("Sheet1")
With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
Me.ComboBox1.ColumnCount = .Columns.Count
Me.ComboBox1.ColumnWidths = "20 pt;20 pt;20 pt"
ws.Activate
'指定範囲の全データをCimboBoxに反映
'(検索条件の部分一致には対応していない)
Me.ComboBox1.RowSource = .Address
WB1.Activate
End With
Application.ScreenUpdating = True
Else
MsgBox "コード.xlsのファイル選択を中止しました"
End If
End Sub
'ComboBoxの選択値をアクティブセルへ転記
Private Sub CommandButton2_Click()
ActiveCell.Value = Me.ComboBox1.Value
Unload Me
End Sub
'ComboBoxの選択肢を消去
Private Sub CommandButton3_Click()
Me.ComboBox1.Clear
End Sub
'ブックオープン済みチェック関数
Function ChkWorkbook(strWorkbookName As String) As Boolean
Dim wb As Workbook
ChkWorkbook = False
For Each wb In Workbooks
If wb.Name = strWorkbookName Then
ChkWorkbook = True
Exit For
End If
Next
End Function
|
|