我需要我的代码来返回随机字符串并且它什么都不返回。我已经包含了代码以使其更容易。我希望这有帮助。
一切都在运行,并且消息即将出现,但变量 dna1 和 dna2 为空。
Dim lengthDNA As Integer
Sub dna()
Dim str As String, dna1 As String, dna2 As String
Dim x As Long
lengthDNA = InputBox("Enter the length of DNA sequences (10-250)")
dna1 = RandInteger("ACGT")
dna2 = RandInteger("ACGT")
MsgBox ("DNA Sequence 1 is: " & dna1 & Chr(13) & "DNA Sequence 2 is: " & dna2), vbInformation
End Sub
Public Function RandInteger(strRandom As String) As String
dnaBank = Array("A", "C", "G", "T")
For x = 1 To lengthDNA
Randomize
strRandom = strRandom & dnaBank(Int((UBound(dnaBank) - LBound(dnaBank) + 1) * Rnd + LBound(dnaBank)))
Next x
End Function
最佳答案
如果不需要,不要使用全局变量。尽可能将变量声明为本地变量,并尽可能接近它们的第一次使用。如果您需要将变量提交给另一个函数/子,请将其作为参数提交。
为变量和函数选择好的名称。 RandInteger
例如非常困惑。您将函数命名为 Integer
但它返回 String
(文本)。而是给它一个有意义的名称,例如 CreateRandomDNA()
并提交 Length
你希望 DNA 作为参数。
Option Explicit
Public Sub dna()
Dim lengthDNA As Long
' get DNA length from user input, allow user to press cancel
Dim ReturnValue As Variant
ReturnValue = Application.InputBox(Prompt:="Enter the length of DNA sequences (10-250)", Type:=1) 'Type:=1 Allow numbers only
If VarType(ReturnValue) = vbBoolean And ReturnValue = False Then
'user pressed cancel
Exit Sub
Else
lengthDNA = ReturnValue
End If
Dim dna1 As String
dna1 = CreateRandomDNA(lengthDNA)
Dim dna2 As String
dna2 = CreateRandomDNA(lengthDNA)
MsgBox "DNA Sequence 1 is: " & dna1 & vbCrLf & "DNA Sequence 2 is: " & dna2, vbInformation
End Sub
Public Function CreateRandomDNA(ByVal Length As Long) As String
Dim dnaBank As Variant
dnaBank = Array("A", "C", "G", "T")
Randomize
Dim strRandom As String
Dim x As Long
For x = 1 To Length
strRandom = strRandom & dnaBank(Int((UBound(dnaBank) - LBound(dnaBank) + 1) * Rnd + LBound(dnaBank)))
Next x
CreateRandomDNA = strRandom ' return random string to function
End Function
如果您需要创建不同的字符串,例如 DNA、RNA、氨基酸(用于蛋白质),您也可以在一个函数中完成:
Option Explicit
Public Enum BioCodeType
bctDNA
bctRNA
bctAminoAcidSingleLetter
bctAminoAcidMultiLetter
End Enum
Public Sub dna()
Dim sequenceLength As Long
Dim ReturnValue As Variant
ReturnValue = Application.InputBox(Prompt:="Enter the length of DNA sequences (10-250)", Type:=1) 'Type:=1 Allow numbers only
If VarType(ReturnValue) = vbBoolean And ReturnValue = False Then
'user pressed cancel
Exit Sub
Else
sequenceLength = ReturnValue
End If
Dim dna As String
dna = CreateRandomBioString(sequenceLength, bctDNA)
Dim rna As String
rna = CreateRandomBioString(sequenceLength, bctRNA)
Dim aminoSingle As String
aminoSingle = CreateRandomBioString(sequenceLength, bctAminoAcidSingleLetter)
Dim aminoMulti As String
aminoMulti = CreateRandomBioString(sequenceLength, bctAminoAcidMultiLetter)
MsgBox "DNA Sequence is: " & dna & vbCrLf & _
"RNA Sequence is: " & rna & vbCrLf & _
"Amino Acid Sequence (single letter) is: " & aminoSingle & vbCrLf & _
"Amino Acid Sequence (multi letter) is: " & aminoMulti & vbCrLf _
, vbInformation
End Sub
Public Function CreateRandomBioString(ByVal Length As Long, ByVal BioCode As BioCodeType) As String
Dim Bank As Variant
Dim Seperator As String
Select Case BioCode
Case bctDNA
Bank = Array("A", "C", "G", "T")
Case bctRNA
Bank = Array("A", "C", "G", "U")
Case bctAminoAcidSingleLetter
Bank = Array("A", "R", "N", "D", "C", "E", "Q", "G", "H", "I", "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V")
Case bctAminoAcidMultiLetter
Bank = Array("ALA", "ARG", "ASN", "ASP", "CYS", "GLU", "GLN", "GLY", "HIS", "ILE", "LEU", "LYS", "MET", "PHE", "PRO", "SER", "THR", "TRP", "TYR", "VAL")
Seperator = "-"
End Select
Dim bankSize as Long
bankSize = UBound(Bank) - LBound(Bank) + 1
Dim bankMin As Long
bankMin = LBound(Bank)
Randomize
Dim strRandom As String
Dim x As Long
For x = 1 To Length
strRandom = strRandom & IIf(strRandom <> vbNullString, Seperator, vbNullString) & Bank(Int(bankSize * Rnd + bankMin))
Next x
CreateRandomBioString = strRandom
End Function
它会返回类似的东西关于excel - 传递函数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72095104/