我一直在努力......但是无法确定它为什么会起作用
我有一个下拉列表,当它被选中时,它会设置一个值,这很好用......
但是当我希望该值显示在另一个子例程中时它不会显示?
请帮帮我?
如果你喜欢任何代码,应该以某种方式写下来让我知道......我是从互联网上学习的,所以我没有“训练好”......
<html>
<head>
<title>Break Logs</title>
<HTA:APPLICATION
icon=icon.ico
singleinstance="yes"
border="thin"
borderStyle="normal"
caption="yes"
maximizeButton="no"
minimizeButton="no"
showInTaskbar="yes"
windowState="normal"
innerBorder="yes"
navigable="no"
scroll="no"
scrollFlat="no"
sysMenu="yes"
>
</head>
<SCRIPT Language="VBScript">
Window.ResizeTo 250, 250
Dim objFSO, wshShell, strUser, Name, LastName, strLogs, strLogFile, strLocation
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GETTING USERS NAME FROM AD THIS IM NOT USING WHEN AT HOME TESTING...
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub asdf
Set wshShell = CreateObject("WScript.Shell")
strUser = wshShell.ExpandEnvironmentStrings("%USERNAME%")
Const ADS_SCOPE_SUBTREE = 2
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("DefaultNamingContext")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT distinguishedName FROM 'LDAP://" & strDomain & "' WHERE objectCategory='User' AND samAccountName = '" & strUser & "'"
Set objRecordSet = objCommand.Execute
If Not objRecordSet.EOF Then
strDN = objRecordSet.Fields("distinguishedName").Value
End If
Set MyUser = GetObject ("LDAP://" & strDN)
Name = myUser.GivenName
LastName = myUser.sn
end sub
Name = "Pavle"
LastName = "Stojanovic"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' SETTING TITLEBAR NAME
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
document.title = "Break Logs For " & Name & " " & LastName
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
CONST ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
strLocation = "F:\"
strLogFile = "Late Breaks.txt"
If Not objFSO.FileExists(strLocation & strLogFile) Then
objFSO.CreateTextFile(strLocation & strLogFile)
End If
Sub Breaks
MorningBreak = (" - Morning Break " & Name & " was late: " & _
HowLate.Value & " Minutes" & vbCrLf & _
" - Reason: " & Reason.Value & vbCrLF & _
" - Date Entered: " & Now())
LunchBreak = (" - Lunch Break " & Name & " was late: " & _
HowLate.Value & " Minutes" & vbCrLf & _
" - Reason: " & Reason.Value & vbCrLF & _
" - Date Entered: " & Now())
AfternoonBreak = (" - Afternoon Break " & Name & " was late: " & _
HowLate.Value & " Minutes" & vbCrLf & _
" - Reason: " & Reason.Value & vbCrLF & _
" - Date Entered: " & Now())
RNA = (" - Ring No Answer Logged By " & Name & vbCrLF & _
" - On Date: " & Now() & vbCrLF & _
" - Reason: " & Reason.Value)
Other = (" - Date Entered: " & Now() & vbCrLf & _
" - Reason: " & Reason.Value)
If DropDown.Value = 1 Then
' Nothing to be done in this option...
ElseIf DropDown.Value = 2 Then
BreakCode = MorningBreak
ElseIf DropDown.Value = 3 Then
BreakCode = LunchBreak
ElseIf DropDown.Value = 4 Then
BreakCode = AfternoonBreak
ElseIf DropDown.Value = 5 Then
BreakCode = RNA
ElseIf DropDown.Value = 6 Then
BreakCode = Other
Else
MsgBox "Something went wrong, this option shouldn't popup"
End If
' If I do MsgBox to display BreakCode it works here before leaving the sub ?
End Sub
Sub Submit
MsgBox BreakCode ' this doesnt show up and below wont write to text ???
Set strLogs = objFSO.OpenTextFile(strLocation & strLogFile, ForAppending, True)
strLogs.WriteLine BreakCode & vbCrLf
strLogs.Close
End Sub
</SCRIPT>
<body bgColor="LightSteelBlue">
<select size="1" name="DropDown" onChange="Breaks">
<option value="1">Choose Break</option>
<option value="2">Morning Break</option>
<option value="3">Lunch Break</option>
<option value="4">Afternoon Break</option>
<option value="5">Ring No Answer</option>
<option value="6">Other</option>
</select>
<BR>
<BR>
Reason:
<BR>
<input type="text" name="Reason" size="10" style="width:200">
<BR>
<BR>
Minutes Late:
<BR>
<input type="text" name="HowLate" size="10">
<BR>
<BR>
<input type="button" value="Submit" onClick="Submit" title="Added Reason for being late.">
</body>
</html>
答案 0 :(得分:2)
您没有在任何地方明确定义变量BreakCode
,所以会发生的事情是脚本引擎会自动在其使用范围内定义变量。因此,您有两个变量BreakCode
:一个在过程Breaks
中,另一个在过程Submit
中。后者从未被赋值,因此它仍为空。
插入一行
Dim BreakCode
这一行之后:
Dim objFSO, wshShell, strUser, Name, LastName, strLogs, strLogFile, strLocation
问题就会消失。
答案 1 :(得分:0)
@Ansgar显然值得在此代码中找到一个错误(+1)。如果将它与干净的“解决方案”进行比较:
<强> HTA:强>
<html>
<head>
<title>Break Logs</title>
<hta:application
id="breaks"
scroll="no"
></hta>
<script type="text/vbscript" src="breaks.vbs"></script>
</head>
<body bgColor="LightSteelBlue">
<form>
<select size="1" name="DropDown">
<option value="1">Choose Break</option>
<option value="2">Morning Break</option>
<option value="3">Lunch Break</option>
<option value="4">Afternoon Break</option>
<option value="5">Ring No Answer</option>
<option value="6">Other</option>
</select>
<br />
<br />
Reason:
<br />
<input type="text" name="Reason" size="10" style="width:200">
<br />
<br />
Minutes Late:
<br />
<input type="text" name="HowLate" size="10">
<br />
<br />
<input type="button" value="Save" onClick="SaveIt" title="Added Reason for being late.">
</form>
</body>
</html>
<强> VBS:强>
Option Explicit
Const ForAppending = 8
Const csFSpec = "wherever"
Window.ResizeTo 250, 250
Dim sFstName : sFstName = "Pavle"
Dim sLstName : sLstName = "Stojanovic"
document.title = "Break Logs For " & sFstName & " " & sLstName
Sub SaveIt
Dim nOpt : nOpt = CInt(document.all.DropDown.Value)
If nOpt <> 1 Then
Dim sReason : sReason = Trim(document.all.Reason.Value)
Dim sHowLate : sHowLate = Trim(document.all.HowLate.Value)
Dim sBreak : sBreak = document.all.DropDown.options(nOpt - 1).text
If sReason <> "" And sHowLate <> "" Then
Dim sLog : sLog = Join(Array( _
"- " & sBreak & " " & sFstName & " was late" _
, "- Minutes: " & sHowLate _
, "- Reason: " & sReason _
, "- Date Entered: " & Now() _
), vbCrLf)
MsgBox sLog
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim tsLogs : Set tsLogs = oFS.OpenTextFile(csFSpec, ForAppending, True)
tsLogs.WriteLine sLog
tsLogs.Close
Else
MsgBox "Fill in Reason and HowLate!"
End If
Else
MsgBox "Choose break type!"
End If
End Sub
你可以轻松拿起其他人:
Save
时,会发生一切有趣的事情。因此根本不需要全局变量OpenTextFile(,,True)
将创建一个不存在的文件,因此检查日志文件的存在是不必要的。你可以专注于中心缺陷:
Save
并破坏日志文件。