Vba 使用Excel组合框将信息从一个文件拉到另一个文件

Vba 使用Excel组合框将信息从一个文件拉到另一个文件,vba,combobox,excel-2010,copy-paste,Vba,Combobox,Excel 2010,Copy Paste,我正在尝试将信息从excel数据库文件复制到excel显示文件。我已经知道了如何在中复制这些信息,并且根据我正在查看的不同信息,我有不同的宏。这些似乎是自己的工作 但是,我还想包括一个下拉字段,允许用户选择他们想要查看的数据集(基本上是哪个客户)。我的代码如下,我是该网站的新手,因此如果任何格式不正确,请让我知道,以便我可以改进:) 因此,代码选择了正确的大小写,然后当它启动到指定的宏中时,会弹出一个“运行时错误'1004':Select method of Range class failed

我正在尝试将信息从excel数据库文件复制到excel显示文件。我已经知道了如何在中复制这些信息,并且根据我正在查看的不同信息,我有不同的宏。这些似乎是自己的工作

但是,我还想包括一个下拉字段,允许用户选择他们想要查看的数据集(基本上是哪个客户)。我的代码如下,我是该网站的新手,因此如果任何格式不正确,请让我知道,以便我可以改进:)

因此,代码选择了正确的大小写,然后当它启动到指定的宏中时,会弹出一个“运行时错误'1004':Select method of Range class failed”。当我去调试代码时,它有一个“范围”(“D1:D278”)。选择“当它失败时突出显示为”。我试过复制列,我试过复制更小的范围,但没有任何效果。范围内的所有单元格中都包含信息,但由于某些原因,这些信息无法正常工作。我真的很感谢任何人的帮助

Private子组合框1_Click()
Private Sub ComboBox1_Click()

    Dim wbPlt As Workbook, wbTool As Workbook, sourceRange As String

    Set wbPlt = Workbooks("Product_List_Template.xlsx")
    Set wbTool = ThisWorkbook 'Workbooks("Tool V0A.xlsm")

    Select Case ComboBox1.Value
      Case "Acme": sourceRange = "C1:C278"
      Case "Ball": sourceRange = "D1:D278"
      Case Else: sourceRange = ""
    End Select

    'copy if have source range
    If sourceRange <> "" Then

        wbPlt.Sheets("Segment1").Range(sourceRange).Copy _
                   wbTool.Sheets("Segment1").Range("J1")

        wbPlt.Sheets("Segment2").Range(sourceRange).Copy _
                   wbTool.Sheets("Segment2").Range("J1")

        wbTool.Sheets("Dashboard").Select
        Application.CutCopyMode = False
        Calculate

    End If

End Sub
将wbPlt设置为工作簿,将wbTool设置为工作簿,将sourceRange设置为字符串 设置wbPlt=工作簿(“产品列表模板.xlsx”) 设置wbTool=This工作簿的工作簿(“工具V0A.xlsm”) 选择casecombobox1.Value 案例“Acme”:sourceRange=“C1:C278” 案例“Ball”:sourceRange=“D1:D278” Case-Else:sourceRange=“” 结束选择 '如果有源范围,则复制 如果源范围为“”,则 wbPlt.Sheets(“Segment1”).范围(sourceRange).复制_ wbTool.Sheets(“段1”).范围(“J1”) wbPlt.Sheets(“段2”).范围(源范围).复制_ wbTool.Sheets(“段2”).范围(“J1”) wbTool.Sheets(“仪表板”)。选择 Application.CutCopyMode=False 算计 如果结束 端接头
检查下面Tim Williams的答案。使用或依赖
选择
激活
方法很容易出错,正如您所发现的,除非您完全限定每个引用。但99%的情况下,您可以避免使用这些方法,直接使用对象。选择/激活通常是多余的。干杯。当它试图查找工作簿时,在第5行出现错误,我打开了它,它在同一个文件夹中,但显然它是在单独的excel环境中打开的。我现在遇到的问题是,它没有在程序结束时执行计算功能。再次感谢!当你说它“没有做”计算到底发生了什么-什么都没有,或者你得到了一个错误?它不是计算和更新。数据被拉入,但公式不会根据拉入的新数据进行更新。请尝试
calculatefulll
CalculateFullRebuild
Hi Tim,如果我使用其中任何一个,我会得到一个“未定义的子函数或函数”
Private Sub ComboBox1_Click()

    Dim wbPlt As Workbook, wbTool As Workbook, sourceRange As String

    Set wbPlt = Workbooks("Product_List_Template.xlsx")
    Set wbTool = ThisWorkbook 'Workbooks("Tool V0A.xlsm")

    Select Case ComboBox1.Value
      Case "Acme": sourceRange = "C1:C278"
      Case "Ball": sourceRange = "D1:D278"
      Case Else: sourceRange = ""
    End Select

    'copy if have source range
    If sourceRange <> "" Then

        wbPlt.Sheets("Segment1").Range(sourceRange).Copy _
                   wbTool.Sheets("Segment1").Range("J1")

        wbPlt.Sheets("Segment2").Range(sourceRange).Copy _
                   wbTool.Sheets("Segment2").Range("J1")

        wbTool.Sheets("Dashboard").Select
        Application.CutCopyMode = False
        Calculate

    End If

End Sub