簡體   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