有没有办法保护VBA密码保护免受这样的破解:
或者这一个:
https://superuser.com/questions/807926/how-to-bypass-the-vba-project-password-from-excel
我真的需要加强我的VBA代码的安全性,因为它包含敏感的SQL数据!
谢谢
这可能是一个新手问题,但我非常不熟悉SQL Server 中的OUTPUT子句如何工作。INSERT
问题
我正在将值插入表中,并且我想为该操作生成一个唯一的 id。之前我使用以下代码来生成唯一的 id:
select top 1 id
from [dbo].[TEP_Payments_Table]
order by id desc + 1
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,如果某些用户同时使用该表单,他们可能会拥有重复的 ID。
解决方案
经过大量研究,我发现Output Inserted这显然可以解决这个问题。
为此,我创建了下表:
TEP_ReceiptID- 其中列ReceiptID是 id col 和主键。然后我尝试在我常用的插入语句中使用“输出插入”,代码:
INSERT INTO [dbo].[TEP_Payments_Table] ([col1], [col2])
VALUES
OUTPUT inserted.ID INTO dbo.TEP_ReceiptID
('testval1', 'testval2')
Run Code Online (Sandbox Code Playgroud)
令我失望的是,这不起作用。再次,我的错,因为我对此不熟悉Output语法。
如果您能告诉我哪里出了问题,我将不胜感激。
我在 Google Apps 脚本中有一个非常简单的 For 循环来检查 Google Sheet 中的一些条件。我想要的是添加另一个条件,如果满足,那么我想跳过当前迭代并继续下一个。这在 VBA 中很容易,但我不知道如何在 JavaScript 上做到这一点。
当前代码:
for (var i=1 ; i<=LR ; i++)
{
if (Val4 == "Yes")
{
// Skip current iteration... <-- This is the bit I am not sure how to do
}
elseif (Val1 == "Accepted" && !(Val2 == "") && !(Val3 == ""))
{
// Do something..
}
else
{
// Do something else...
}
}
Run Code Online (Sandbox Code Playgroud) 我在Workbook_Open()上的VBA中设置一个公共字典.我想在电子表格中创建的任何模块中访问此词典中的项目.
我的代码ThisWorkbook是:
Option Explicit
Public Dic As Scripting.Dictionary
Private Sub Workbook_Open()
Set Dic = New Scripting.Dictionary
Dic.Add Key:="cat", item:="Database"
Dic.Add Key:="pwd", item:="Password"
Dic.Add Key:="col", item:="Server"
End Sub
Run Code Online (Sandbox Code Playgroud)
当我转到任何模块并使用该msgbox函数调用项目时,它不起作用:
MsgBox (Dic("col"))
Run Code Online (Sandbox Code Playgroud)
任何提示请如何使这项工作?
我们的想法是在电子表格的开头设置这个字典,并且在任何后续模块中都需要访问它.
干杯
我有两个模块,Module1和Module2。
在第1单元中:
Private Function myCheck() As Boolean
if [Operation] = [Something] then
myCheck = True
Else
myCheck = False
End if
End Sub
Run Code Online (Sandbox Code Playgroud)
在Module2中,我想在模块1中运行myCheck子,然后执行另一项操作:
Private Sub Execute()
[Operation 1]
If myCheck = True Then
[Operation 2]
Else
[Operation 3]
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
这是行不通的。如果我将私有功能myCheck放在同一模块中,那么它将起作用。是否有一种特殊的方法可以从另一个模块调用子或函数?
继续我之前的问题。经过大量研究,我发现将数据从 Excel 插入 SQL Server 的方法是最有效的,代码如下。
我真正想要建议的是如何设置 ADODB 提交和回滚。我不确定这是否可能,因为我的代码通过 FOR 循环将数据插入 SQL Server,并且我认为提交和回滚需要在一次 SQL 执行中完成?
代码
Pre-loop code
For i = 7 To LastRow
'Check if it was sent - then skip iteration
With Worksheets("Admin")
If .Cells(i, 5).Value = "Y" Then
GoTo NextIteration
Else
Command.CommandText = "INSERT INTO [dbo].[TEP_Payments_Table] ([AA Number], [AA Name], [AA Role], [Project Name], [Series], [Paper No], [Task Name], [Amount], [Payment Justification], [Payment Identifier], [Date of Activity], [Half Day / Full Day], [Teacher Release (Y/N)], [Centre No], …Run Code Online (Sandbox Code Playgroud) 我正在验证 Excel 中 VB 用户窗体中某些文本框中的数据。
数据可以是长度为 6 位的数字、长度至少为 3 个字符的字符串或字符串和数字的组合。
为此,我写道:
If Len(Trim(Me.TextBox1)) = 6 And IsNumeric(Trim(Me.TextBox1)) Then
(do operation)
Elseif Len(Trim(Me.TextBox1)) > 2 and IsString(Trim(Me.TextBox1)) Then
(do another operation)
Else
(do third operation)
End if
Run Code Online (Sandbox Code Playgroud)
我可以让它工作isNumeric,但似乎 VBA 不支持isString.
有没有巧妙的解决方法来解决这个问题?
我需要将所有月份转换为2位数字,如下所示:
1,2,3,4,5,6,7,8,9,10,11,12
Run Code Online (Sandbox Code Playgroud)
对此:
01,02,03,04,05,06,07,08,09,10,11,12
Run Code Online (Sandbox Code Playgroud)
所以我把一个简单的CASE语句放在一起检查月份的长度值是否为1,然后添加一个前导零,否则保持原样:
SELECT
CASE
WHEN LEN(MONTH(GETDATE())) = 1
THEN RIGHT('0' + CONVERT(VARCHAR(2), MONTH(GETDATE())), 2)
ELSE MONTH(GETDATE())
END
Run Code Online (Sandbox Code Playgroud)
我们在四月,这次行动的结果是'4',而不是'04'.检查语句时(没有条件语句):
right('0' + convert(varchar(2),month(getdate())),2)
Run Code Online (Sandbox Code Playgroud)
然后我得到正确的答案('04')....
这让我大吃一惊..我已经在这一整天了,我无法弄清楚为什么代码单独工作,但是在CASE语句中包含失败.
请帮忙!
我在VBA上编写了一个非常简单的Ceaser Cipher加密算法.它需要一个字符串值并应用x shift.
很高兴.但是,想把它带到下一步,但我不确定它是否可行.
我想在另一个模块中调用此加密函数并传递字符串值以进行加密.
即我想要做的是这样的事情
Private Sub Encryption()
'Encryption method of string Var
End Sub
Run Code Online (Sandbox Code Playgroud)
----并在另一个子----
Private Sub function()
Dim Text as String
Text = "Hello"
Encryption(Text)
End Sub
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,我已经定义了一个加密任何字符串变量的方法.在另一个函数中,我定义了一个字符串并将其初始化为"Hello".然后在它上面调用加密功能......不确定这在VBA中是否可行?
当我在函数中调用函数时,我不确定如何传入变量.有什么建议吗?
我正在尝试在 Google Apps 脚本中编写一个非常基本的 For 循环,它确实应该运行得很快。但是,当我执行它时,需要很长时间才能运行,直到出现运行时间太长的错误(错误:超出最大执行时间)。
代码是:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var Sheet = ss.getActiveSheet();
var LR = Sheet.getLastRow()
for(var i=1;i=10;i++)
{
Logger.log(i);
}
}
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?还是我的 Google Apps 脚本搞砸了?