Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
引用在另一个子系统(VBA)中找到的工作簿文件路径_Vba_Excel - Fatal编程技术网

引用在另一个子系统(VBA)中找到的工作簿文件路径

引用在另一个子系统(VBA)中找到的工作簿文件路径,vba,excel,Vba,Excel,我遇到了这个问题,我在第一个子目录中导入并打开了一个工作簿,但想在第二个子目录中引用它,但我不确定如何导入和打开。现在它是一个静态名称(我用几个单引号表示该行) 我尝试引用我的变量“filename”,但因为它必须是工作簿中的工作表,所以我不确定该如何做。提前谢谢你 Sub Procedure1() Dim Filt As String Dim filterindex As Integer Dim title As String Dim filename As V

我遇到了这个问题,我在第一个子目录中导入并打开了一个工作簿,但想在第二个子目录中引用它,但我不确定如何导入和打开。现在它是一个静态名称(我用几个单引号表示该行)

我尝试引用我的变量“filename”,但因为它必须是工作簿中的工作表,所以我不确定该如何做。提前谢谢你

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