'Jackknife.bas grids the data set n times, leaving one of the data points out ' each time. Also known as cross-validation. ' 'The default file path for the output grids is the samples directory. 'If you do not have permission to save files to Program Files folders, this path must be updated on line 27 Sub Main Debug.Clear Debug.Print "----- ";Time;" -----" On Error Resume Next Set Surf = GetObject(, "Surfer.Application") If Err Then 'Don't clear Err so new errors will stop script execution. Err.Clear Set Surf = CreateObject("Surfer.Application") surf.Documents.Add(srfDocPlot) If Err Then MsgBox Err.Description Exit Sub End If End If surf.Visible = True Set plotdoc1 = surf.Documents("Plot1") Set plotwin1 = surf.Windows("Plot1:1") path1 =surf.Path+"\samples\" 'This path must be updated if you are unable to save to Program Files locations datafile1 = GetFilePath("demogrid.dat", _ "dat;xls", _ path1, _ "Get Data File", _ 0) Set shapes1 = plotdoc1.Shapes 'surf.Open datafile1 Set wksdoc1 = surf.Documents.Open(datafile1) 'Set range from column A to C. Set xyrange = wksdoc1.Columns(col1:=1, col2:=3) Set xystats = xyrange.Statistics 'Attempt to skip header row and find first data row. With xystats firstrow = .FirstRow While Val(wksdoc1.Cells(firstrow,1)) = 0 And _ Trim(wksdoc1.Cells(firstrow,1)) <> "0" firstrow=firstrow+1 Wend lastrow = .LastRow xmin = .Minimum xmax = .Maximum ymin = .Minimum(2) ymax = .Maximum(2) End With Debug.Print firstrow;lastrow;xmin;xmax;ymin;ymax surf.GridData(datafile1, outgrid:= path1 + "file1.grd", _ showreport := False, _ algorithm:=srfKriging) 'Add header to column D. wksdoc1.Cells(1,4)="Jackknife" 'Grid with exclusion filter. 'Expand grid by 1.0 data unit so edges aren't blanked. For i = firstrow To lastrow x1 = wksdoc1.Cells(i,1) y1 = wksdoc1.Cells(i,2) exclusionstring = "x = " + x1 + " and y = " + y1 surf.GridData(datafile1, _ algorithm:=srfKriging, _ exclusionfilter := exclusionstring, _ outgrid := path1 + "temp.grd", _ showreport := False, _ xMin:=xmin-1, xMax:=xmax+1, yMin:=ymin-1, yMax:=ymax+1) Set grid1 = surf.NewGrid grid1.LoadFile(path1 + "temp.grd", False) wksdoc1.Cells(i,4) = grid1.Interpolate(Val(x1),Val(y1)) jackdiff = wksdoc1.Cells(i,3) - wksdoc1.Cells(i,4) sumsquares = sumsquares + (jackdiff * jackdiff) For j = 1 To 4 Debug.Print wksdoc1.Cells(i,j);" "; Next j Debug.Print "" Next i Debug.Print "Sum of Squares of Differences = ";sumsquares End Sub