引用在另一个子系统(VBA)中找到的工作簿文件路径
我遇到了这个问题,我在第一个子目录中导入并打开了一个工作簿,但想在第二个子目录中引用它,但我不确定如何导入和打开。现在它是一个静态名称(我用几个单引号表示该行) 我尝试引用我的变量“filename”,但因为它必须是工作簿中的工作表,所以我不确定该如何做。提前谢谢你引用在另一个子系统(VBA)中找到的工作簿文件路径,vba,excel,Vba,Excel,我遇到了这个问题,我在第一个子目录中导入并打开了一个工作簿,但想在第二个子目录中引用它,但我不确定如何导入和打开。现在它是一个静态名称(我用几个单引号表示该行) 我尝试引用我的变量“filename”,但因为它必须是工作簿中的工作表,所以我不确定该如何做。提前谢谢你 Sub Procedure1() Dim Filt As String Dim filterindex As Integer Dim title As String Dim filename As V
Sub Procedure1()
Dim Filt As String
Dim filterindex As Integer
Dim title As String
Dim filename As Variant
Filt = "Comma Seperated Files (*.csv),*.csv"
filterindex = 1
title = "Select a File to Import"
filename = Application.GetOpenFilename _
(FileFilter:=Filt, _
filterindex:=filterindex, _
title:=title)
If filename = False Then
MsgBox "No file was selected"
Exit Sub
End If
Workbooks.Open filename
End Sub
Sub Procedure2()
Dim CurrentWS As Worksheet
Set CurrentWS = ActiveSheet
Dim SourceWS As Worksheet
Set SourceWS = Workbooks("cedar.csv").Worksheets(1)''''''''''''''''''''''
Dim SourceHeaderRow As Integer: SourceHeaderRow = 1
Dim SourceCell As Range
Dim TargetWS As Worksheet
Set TargetWS = Workbooks("Prototype.xlsm").Worksheets(1)
Dim TargetHeader As Range
Set TargetHeader = TargetWS.Range("A1:AX1")
Dim RealLastRow As Long
Dim SourceCol As Integer
SourceWS.Activate
For Each Cell In TargetHeader
If Cell.Value <> "" Then
Set SourceCell = Rows(SourceHeaderRow).Find _
(Cell.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not SourceCell Is Nothing Then
SourceCol = SourceCell.Column
RealLastRow = Columns(SourceCol).Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
If RealLastRow > SourceHeaderRow Then
Range(Cells(SourceHeaderRow + 1, SourceCol), Cells(RealLastRow, _
SourceCol)).Copy
TargetWS.Cells(2, Cell.Column).PasteSpecial xlPasteValues
End If
End If
End If
Next
CurrentWS.Activate
Workbooks("Prototype.xlsm").Sheets(1).Range("A1").Select
End Sub
子过程1()
作为字符串的Dim Filt
Dim filterindex作为整数
将标题设置为字符串
变暗文件名作为变量
Filt=“逗号分隔的文件(*.csv),*.csv”
filterindex=1
title=“选择要导入的文件”
filename=Application.GetOpenFilename_
(FileFilter:=Filt_
filterindex:=filterindex_
头衔:=头衔)
如果filename=False,则
MsgBox“未选择任何文件”
出口接头
如果结束
工作簿。打开文件名
端接头
次级程序2()
将当前WS设置为工作表
设置CurrentWS=ActiveSheet
将SourceWS设置为工作表
设置SourceWS=工作簿(“cedar.csv”)。工作表(1)
将SourceHeaderRow设置为整数:SourceHeaderRow=1
暗淡源单元格作为范围
将目标设置为工作表
设置TargetWS=工作簿(“Prototype.xlsm”)。工作表(1)
变暗目标引导器As范围
设置TargetHeader=TargetWS.Range(“A1:AX1”)
最后一行一样长
将SourceCol设置为整数
SourceWS.Activate
对于TargetHeader中的每个单元格
如果单元格的.Value为“”,则
设置SourceCell=行(SourceHeaderRow)。查找_
(Cell.Value,LookIn:=xlValues,LookAt:=xlWhole)
如果不是,那么SourceCell什么都不是
SourceCol=SourceCell.Column
RealLastRow=Columns(SourceCol).Find(“*”,LookIn:=xlValues_
搜索顺序:=xlByRows,搜索方向:=xlPrevious)。行
如果RealLastRow>SourceHeaderRow,则
范围(单元格(SourceHeaderRow+1,SourceCol),单元格(RealLastRow_
SourceCol)。复制
TargetWS.Cells(2,Cell.Column).paste特殊XLPaste值
如果结束
如果结束
如果结束
下一个
当前ws.Activate
工作手册(“Prototype.xlsm”)。工作表(1)。范围(“A1”)。选择
端接头
通常,您会将工作簿作为参数传递给第二个子系统:
Sub One()
Dim wb As Workbook
Set wb = Workbooks.Open(somePath)
Two wb
End sub
Sub Two(wb As Workbook)
With wb.sheets(1)
'work with sheet
End with
End sub
编辑:我注意到您实际上并没有从One
调用Two
,因此另一种方法(但不是那么可靠)可能是:
Dim wb As Workbook 'Global variable
Sub One()
Set wb = Workbooks.Open(somePath)
End sub
Sub Two()
With wb.sheets(1) 'use the global variable
'work with sheet
End with
End sub