Option Strict On 不允许从 'String' 到 'Double' 的隐式转换
Option Strict On disallows implicit conversions from 'String' to 'Double'
1- 创建一个 excel 文件,如 C:\MyFolder\Book1.xlsx.
2- 运行 下面的代码,看看代码运行良好。
Option Strict Off
Imports Microsoft.Office.Interop
Public Class Form1
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
DateTimePicker1.Value = CDate(CStr(System.DateTime.Now.AddDays(-System.DateTime.Now.Day)))
Dim xlApp As New Excel.Application
xlApp.WindowState = Excel.XlWindowState.xlMinimized
Dim wb1 As Excel.Workbook
wb1 = xlApp.Workbooks.Open("C:\MyFolder\Book1.xlsx")
Dim ws1 = CType(wb1.Sheets(1), Excel.Worksheet)
With ws1
.Range("A1").Value = "2017"
If .Range("A1").Value.ToString <> CDbl(DateTimePicker1.Value.ToString("yyyy")) Then
MsgBox("error")
End If
End With
End Sub
End Class
5- 打开 Option Strict 时出现错误。
您想要将 ws.Range("A1").Value
的字符串表示与 DateTimePicker1.Value
的字符串表示进行比较。
DateTimePicker1.Value
到 Double
的转换似乎很奇怪。这就是编译器显示错误的原因,因为代码
.Range("A1").Value.ToString <> CDbl(DateTimePicker1.Value.ToString("yyyy"))
将尝试将类型 string
的值与类型 double
的值进行比较,这在 Strict Option On
中是不允许的。
简单比较字符串而不转换为double
If .Range("A1").Value.ToString() <> DateTimePicker1.Value.ToString("yyyy") Then
MsgBox("error")
End If
1- 创建一个 excel 文件,如 C:\MyFolder\Book1.xlsx.
2- 运行 下面的代码,看看代码运行良好。
Option Strict Off
Imports Microsoft.Office.Interop
Public Class Form1
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
DateTimePicker1.Value = CDate(CStr(System.DateTime.Now.AddDays(-System.DateTime.Now.Day)))
Dim xlApp As New Excel.Application
xlApp.WindowState = Excel.XlWindowState.xlMinimized
Dim wb1 As Excel.Workbook
wb1 = xlApp.Workbooks.Open("C:\MyFolder\Book1.xlsx")
Dim ws1 = CType(wb1.Sheets(1), Excel.Worksheet)
With ws1
.Range("A1").Value = "2017"
If .Range("A1").Value.ToString <> CDbl(DateTimePicker1.Value.ToString("yyyy")) Then
MsgBox("error")
End If
End With
End Sub
End Class
5- 打开 Option Strict 时出现错误。
您想要将 ws.Range("A1").Value
的字符串表示与 DateTimePicker1.Value
的字符串表示进行比较。
DateTimePicker1.Value
到 Double
的转换似乎很奇怪。这就是编译器显示错误的原因,因为代码
.Range("A1").Value.ToString <> CDbl(DateTimePicker1.Value.ToString("yyyy"))
将尝试将类型 string
的值与类型 double
的值进行比较,这在 Strict Option On
中是不允许的。
简单比较字符串而不转换为double
If .Range("A1").Value.ToString() <> DateTimePicker1.Value.ToString("yyyy") Then
MsgBox("error")
End If