繁体   English   中英

尝试在图像框中显示“Temp.jpg”时出现“需要错误 '424' 对象” (imgRpts1)

[英]"Error '424' Object required" when trying to display "Temp.jpg" in an Image Box (imgRpts1)

我正在处理的ApplicationExcel Workbook前面Runs ,因此User无法直接访问各个Worksheets 主要关注的领域是Reports Worksheets ,我想在其中Display等效于WorksheetPrint Preview ,所有data都填充在Worksheet上。 我有 4 个ComboBoxes configured as DDLs和一个Submit Button ,实现选择所需Worksheet的功能,与相应Worksheets关联的Named Ranges ,并在这些Worksheets上填充适当的cells (参见下图)。 表单控件 WorksheetsRanges所有Variables都在WB_Initialization ModuleDeclaredGlobal Variables ,并在UserForm_Initialize()Set

Choose Report Type ComboBox Change Event设置ActiveWorksheet ,其余 3 个ComboBoxes控制Worksheet用于实现正确选择和显示数据的valuesSubmit填充Worksheet上的Cells并调用Function DisplayRange rngToDisplay 在实施DisplayRange rngToDisplay之前,我确认了所有Worksheets的正确操作! Choose Report TypeCode如下:

   Private Sub cmbPropWksts_Change() 'Located on MultiPage1.Page4
   Select Case cmbPropWksts.ListIndex
    Case 0
        wkstSum.Select
        rngRptSum.Select
        Set rngToDisplay = rngRptSum
    Case 1
        wkstDetail.Select
        rngRptDetail.Select
         Set rngToDisplay = rngRptDetail
    Case 2
        wkstCmpYrsElec.Select
        rngRptCmpYrsElect.Select
        Set rngToDisplay = rngRptCmpYrsElect
    Case 3
        wkstCmpYrsGas.Select
        rngRptCmpYrsGas.Select
        Set rngToDisplay = rngRptCmpYrsGas
   End Select

   cmdSubmit.Caption = "Display " & cmbPropWksts.Value

   Call MeasureSelection_Pixels

    If cmbPropWksts.ListIndex > 1 Then
        cmbwkstYrs2.Visible = True
    End If
    
   End Sub

Submit Button Code在这里:

    
    pID = cmbRptPrpID.Text
    pIndex = cmbRptPrpID.ListIndex + 2
    wsYr1 = cmbWkstYrs1.Text
    wsYr2 = cmbwkstYrs2.Text
    
    Select Case cmbPropWksts.ListIndex
        Case 0
            ActiveSheet.Cells(3, "B") = cmbRptPrpID.Text              'Cell B3 of the Summary Worksheet
            ActiveSheet.Cells(3, "Q") = cmbWkstYrs1.Text              'Cell Q3 of the Summary Worksheet
            ActiveSheet.Cells(1, "A") = wsCntrl.Cells(pIndex, "N")    'Cell for the Property's address
        Case 1
            ActiveSheet.Cells(3, "B") = cmbRptPrpID.Text              'Cell B3 of the Summary Worksheet
            ActiveSheet.Cells(3, "Q") = cmbWkstYrs1.Text              'Cell Q3 of the Summary Worksheet
            ActiveSheet.Cells(1, "A") = wsCntrl.Cells(pIndex, "N")    'Cell for the Property's address
        Case 2, 3
            ActiveSheet.Cells(2, "B") = cmbRptPrpID.Text              'Cell B3 of the Summary Worksheet
            ActiveSheet.Cells(2, "C") = cmbWkstYrs1.Text              'Cell Q3 of the Summary Worksheet
            ActiveSheet.Cells(17, "C") = cmbwkstYrs2.Text             'Cell Q17 of the Summary Worksheet
            ActiveSheet.Cells(1, "A") = wsCntrl.Cells(pIndex, "N")    'Cell for the Property's address
    End Select
    
    
    DisplayRange rngToDisplay
    
    End Sub

最后, DisplayRange代码在这里:

        Function DisplayRange(r As Range)
        Dim wsChart As Worksheet
        Dim fname As String
        
        Set wsChart = ThisWorkbook.Worksheets("tmpChart")
        
        fname = ThisWorkbook.Path & "\TempImages\temp.jpg"
        
        r.CopyPicture xlScreen, xlBitmap
        
        With wsChart
        Dim chtObj As ChartObject
        Set chtObj = .ChartObjects.Add(100, 30, 400, 250)
        
        With chtObj
            .Width = r.Width: .Height = r.Height
            .Chart.Paste
            .Chart.Export Filename:=fname, FilterName:="jpg"
            .Delete
        End With
        DoEvents
        End With
        
        imgRpts1.Picture = LoadPicture(fname)
        
        End Function

对上述FunctionCall正确地在正确的Worksheet表上生成Chart ,如下所示: 来自 tmpChart 工作表的图像 并在此处创建temp.jpg图像: 温度.jpg 在此处的正确Folder中: 临时图像文件夹 Error 424发生在这里! 错误 424

我的研究表明,此Error的最常见原因是由于Undeclared/Improperly Declared Varables 我已经检查了Varable ScopesImage Box NameFile Paths ,所以显然我遗漏了一些东西。

在此先感谢您的帮助!

由于@Ambie 的一个问题,我重新访问了Function DisplayRangeModule Code 我记得在尝试将CodeUserForm移动到Module并不断收到Variable Not Defined Error时遇到的类似问题。 我今天学到了两个宝贵的教训。 首先,确保在 EVERY Module中使用Option Explicit 其次,我学习了如何设置Inter-ModuleModule to UserForm通信。

我通过添加这两行Code解决了这个问题:

   Dim imgRpts1 As Object
   Set imgRpts1 = UserForm1.imgRpts1

这是最终的Function Code

     Option Explicit
            
    Function DisplayRange(r As Range)
        Dim wsChart As Worksheet
        Dim fname As String
        Dim imgRpts1 As Object
        Set imgRpts1 = UserForm1.imgRpts1
        Set wsChart = ThisWorkbook.Worksheets("tmpChart")
        fname = ThisWorkbook.Path & "\TempImages\temp.jpg"
        
        r.CopyPicture xlScreen, xlBitmap
        
        With wsChart
        Dim chtObj As ChartObject
        Set chtObj = .ChartObjects.Add(100, 30, 400, 250)
        
        With chtObj
            .Width = r.Width: .Height = r.Height
            .Chart.Paste
            .Chart.Export Filename:=fname, FilterName:="jpg"
            .Delete
        End With
        DoEvents
        End With
        
        imgRpts1.Picture = LoadPicture(fname)
    
    End Function

它有效! [![它的工作原理!][1]][1] [1]:https://i.stack.imgur.com/3DfCD.jpg

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM