title: Loop Updating Chart Image on Userform
body: <p>Okay,</p>
  
  <p>So I am trying to integrate the following code:</p>
  
  <pre><code>`Private Sub UserForm_Initialize()
      Dim Fname As String
  
      Call SaveChart
      Fname = ThisWorkbook.Path &amp; "\temp1.gif"
      Me.Image1.Picture = LoadPicture(Fname)
  End Sub
  
  Private Sub SaveChart()
      Dim MyChart As Chart
      Dim Fname As String
  
      Set MyChart = Sheets("Data").ChartObjects(1).Chart
      Fname = ThisWorkbook.Path &amp; "\temp1.gif"
      MyChart.Export Filename:=Fname, FilterName:="GIF"
  End Sub`
  </code></pre>
  
  <p>from this post: <a href="https://stackoverflow.com/questions/31598704/displaying-live-chart-data-in-excel-userform/31600919#3160091">Displaying &quot;live&quot; chart data in Excel Userform</a> into an existing loop so that the above section of code iterates with the loop and the image is updated every time the loop executes.  I would have posted this as a comment on the above mentioned question, but I do not have enough rep.</p>
  
  <pre><code>'
  ' Get last logged data
  '
  Private Sub GetLastLoggedData()
      Dim rangeToWrite
      Dim lStartFileSize As Long
      Dim lNextFileSize As Long
      Dim dtStartTime As Date
      Dim lElapsedTime As Long
      Dim bDone As Boolean
      Dim sLastHeader As String
      Dim sLastData As String
      Dim iCol As Integer
      Dim sNextValue As String
      Dim iLoop As Integer
      Dim Fname As String
      Dim MyChart As Chart
  
      On Error GoTo ErrorHandler
  
     ' Initialize global_bHasScanCount flag
     global_bHasScanCount = False
  
     ' Get the file size of the log file
      lStartFileSize = FileLen(global_sLogFile)
  
      ' Initialize timer
      dtStartTime = Now
  
      ' Wait for filesize to change
      UpdateLogStatus Now &amp; " : Data Monitor: waiting for file size to change..."
      bDone = False
      Do
          ' Get the file size of the log file and see if it's changed
          lNextFileSize = FileLen(global_sLogFile)
          If lNextFileSize &lt;&gt; lStartFileSize And lNextFileSize &lt;&gt; 0 Then
              bDone = True
          Else
              lElapsedTime = DateDiff("s", dtStartTime, Now)
              If (lElapsedTime &gt;= global_lTimeout) Or (lElapsedTime &lt; 0) Then
                  bDone = True
              End If
          End If
  
          DoEvents
  
      Loop Until bDone = True
  
      ' Backup the file
      UpdateLogStatus Now &amp; " : Data Monitor: backing up data file..."
      'FileCopy global_sLogFile, global_sLogFileBackup
  
      ' Read the log file
      UpdateLogStatus Now &amp; " : Data Monitor: reading data file..."
      sLastData = ""
      sLastHeader = ""
  
      If ReadLogFile(global_sLogFile, sLastData, sLastHeader) = False Then
          ' Delete the backup log file
          'Kill global_sLogFileBackup
  
          Exit Sub
      End If
  
      ' Delete the backup log file
      'Kill global_sLogFileBackup
  
      UpdateLogStatus Now &amp; " : Data Monitor: updating worksheet..."
  
  
      ' Clear previous Results in Excel Spreadsheet
      ThisWorkbook.Worksheets("ACQUIRE DATA").Range("A2:IV2").ClearContents
  
      ' Parse comma delimeted header and place data into worksheet cells.  If we have the scan count then
      ' start writing in column1, else starting writing in column2.
  
      If global_bHasScanCount = True Then
          iCol = 1
      Else
          iCol = 2
      End If
  
      If sLastHeader &lt;&gt; "" Then
          ' Clear previous Results in Excel Spreadsheet
          ThisWorkbook.Worksheets("ACQUIRE DATA").Range("A1:IV1").ClearContents
  
          Do
              sNextValue = GetToken(sLastHeader, ",")
  
              ' Copy Results to Excel worksheet
              ThisWorkbook.Worksheets("ACQUIRE DATA").Cells(1, iCol).Value = sNextValue
              iCol = iCol + 1
  
          Loop Until sLastHeader = ""
      End If
  
      ' Parse comma delimeted results and place data into worksheet cells.  If we have the scan count then
      ' start writing in column1, else starting writing in column2.
  
      If global_bHasScanCount = True Then
          iCol = 1
      Else
          iCol = 2
      End If
      Do
          sNextValue = GetToken(sLastData, ",")
  
          ' Copy Results to Excel worksheet
          ThisWorkbook.Worksheets("ACQUIRE DATA").Cells(2, iCol).Value = sNextValue
          iCol = iCol + 1
          'Copy Current Data to Control Panel
          UserForm2.TextBox2.Text = Sheets("ACQUIRE DATA").Range("B12")
          'Copy Time to Control Panel 
          UserForm2.TextBox3 = Format(Sheets("ACQUIRE DATA").Range("B13"), "hh:mm:ss")
          'Copy Speed to Control Panel 
          UserForm2.TextBox4.Text = Sheets("ACQUIRE DATA").Range("B14")
  
     'create .gif file of current PerfMap chart
      Set MyChart = Sheets("PerfMap").ChartObjects(1).Chart
      Fname = ThisWorkbook.Path &amp; "\temp1.gif"
      MyChart.Export Filename:=Fname, FilterName:="GIF"
      Fname = ThisWorkbook.Path &amp; "\temp1.gif"
      'set live data chart image to most recent image
      UserForm3.Image1.Picture = LoadPicture(Fname)
  
  
      Loop Until sLastData = ""
      UpdateLogStatus ""
  
  
  
      Exit Sub
  
  ErrorHandler:
      BuildErrorMessage "GetLastLoggedData", "Failed to get last logged data."
      UpdateLogStatus ""
  
  
  
  End Sub'
  </code></pre>
  
  <p>However whenever I do this I get a Runtime Error 1004 that is built by the error handler.  Any help on why this is not working is much appreciated.</p>
  
  <p><strong>EDIT</strong>: After walking away for 24 hours, I realized that the sheet in question is a chart sheet, and not an embedded chart, therefore the method I was attempting to use above was not working.</p>
  
  <p>The chart is on a chart sheet called PerfMap, but the chart name is Chart 7.</p>